
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>适合程序员创造的资产·付费课程</title>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css">
        <style>
            :root {
                --primary: #1e88e5;
            }
            body {
                padding: 2rem;
                line-height: 1.8;
            }
            .container {
                max-width: 1200px;
                margin: 0 auto;
                display: flex;
                gap: 2rem;
                padding: 0 1rem;
            }
            h1 {
                color: var(--primary);
                border-bottom: 2px solid var(--primary);
                padding-bottom: 0.5rem;
            }
            h2 {
                color: #2196f3;
                margin-top: 2rem;
            }
            h3 {
                color: #42a5f5;
            }
            blockquote {
                border-left: 4px solid var(--primary);
                margin: 1.5rem 0;
                padding: 1rem;
                background: #f5f5f5;
            }
            .reading-time {
                color: #666;
                font-style: italic;
                margin-bottom: 2rem;
            }
            .last-updated {
                margin-top: 3rem;
                padding-top: 1rem;
                border-top: 1px solid #eee;
                font-size: 0.9rem;
                color: #666;
            }
            @media (prefers-color-scheme: dark) {
                blockquote {
                    background: #1a1a1a;
                }
            }
            
            /* 侧边栏样式 */
            .sidebar {
                position: sticky;
                top: 2rem;
                width: 300px;
                height: calc(100vh - 4rem);
                overflow-y: auto;
                padding: 1rem;
                background: #f8f9fa;
                border-radius: 8px;
                flex-shrink: 0;
            }
            
            .sidebar-title {
                font-size: 1.2rem;
                color: var(--primary);
                margin-bottom: 1rem;
                padding-bottom: 0.5rem;
                border-bottom: 2px solid var(--primary);
            }
            
            .sidebar a {
                display: block;
                padding: 0.5rem;
                color: #333;
                text-decoration: none;
                margin: 0.2rem 0;
                border-radius: 4px;
                transition: all 0.2s ease;
            }
            
            .sidebar a:hover {
                background: #e9ecef;
                color: var(--primary);
            }
            
            .sidebar a.active {
                background: var(--primary);
                color: white;
            }
            
            .main-content {
                flex: 1;
                min-width: 0;
                padding: 2rem;
                background: white;
                border-radius: 8px;
            }
            
            @media (max-width: 768px) {
                .container {
                    flex-direction: column;
                }
                .sidebar {
                    position: relative;
                    width: 100%;
                    height: auto;
                    margin-bottom: 1rem;
                }
            }
            
            @media (prefers-color-scheme: dark) {
                .sidebar {
                    background: #1a1a1a;
                }
                .sidebar a {
                    color: #fff;
                }
                .sidebar a:hover {
                    background: #2a2a2a;
                }
                .main-content {
                    background: #1a1a1a;
                }
            }
            
            /* 章节导航样式 */
            .chapter-nav {
                display: flex;
                justify-content: space-between;
                margin-top: 4rem;
                padding-top: 2rem;
                border-top: 1px solid #eee;
            }
            
            .chapter-nav a {
                display: inline-flex;
                align-items: center;
                padding: 1rem 1.5rem;
                background: var(--primary);
                color: white;
                text-decoration: none;
                border-radius: 8px;
                transition: all 0.3s ease;
                gap: 0.5rem;
            }
            
            .chapter-nav a:hover {
                background: #1565c0;
                transform: translateY(-2px);
                box-shadow: 0 4px 12px rgba(0,0,0,0.1);
            }
            
            .chapter-nav a.prev::before {
                content: "←";
                font-size: 1.2em;
            }
            
            .chapter-nav a.next::after {
                content: "→";
                font-size: 1.2em;
            }
            
            .chapter-nav .placeholder {
                width: 150px;
            }
            
            @media (max-width: 600px) {
                .chapter-nav {
                    flex-direction: column;
                    gap: 1rem;
                }
                .chapter-nav a {
                    text-align: center;
                    justify-content: center;
                }
            }
            
            @media (prefers-color-scheme: dark) {
                .chapter-nav {
                    border-top-color: #333;
                }
                .chapter-nav a:hover {
                    background: #1976d2;
                }
            }
            
            /* 主题切换按钮 */
            .theme-toggle {
                position: fixed;
                bottom: 20px;
                right: 20px;
                z-index: 1000;
                width: 50px;
                height: 50px;
                border-radius: 50%;
                background: var(--primary);
                color: white;
                border: none;
                cursor: pointer;
                box-shadow: 0 2px 10px rgba(0,0,0,0.1);
                display: flex;
                align-items: center;
                justify-content: center;
                font-size: 1.5rem;
                transition: all 0.3s ease;
            }

            .theme-toggle:hover {
                transform: scale(1.1);
            }

            /* 移动端优化 */
            @media (max-width: 768px) {
                .container {
                    flex-direction: column;
                    padding: 0;
                }
                
                .sidebar {
                    position: relative;
                    width: 100%;
                    height: auto;
                    max-height: 300px;
                    margin: 0;
                    border-radius: 0;
                }
                
                .main-content {
                    padding: 1rem;
                    margin: 0;
                    border-radius: 0;
                }
                
                .chapter-nav {
                    flex-direction: column;
                    gap: 1rem;
                }
                
                .chapter-nav a {
                    width: 100%;
                    justify-content: center;
                }
                
                body {
                    padding: 0;
                }
                
                h1 {
                    font-size: 1.5rem;
                }
                
                h2 {
                    font-size: 1.3rem;
                }
                
                .theme-toggle {
                    width: 40px;
                    height: 40px;
                    font-size: 1.2rem;
                }
            }

            /* 深色模式样式 */
            html[data-theme="dark"] {
                color-scheme: dark;
            }

            html[data-theme="dark"] body {
                background-color: #1a1a1a;
                color: #fff;
            }

            html[data-theme="dark"] .main-content {
                background: #2a2a2a;
            }

            html[data-theme="dark"] .sidebar {
                background: #2a2a2a;
            }

            html[data-theme="dark"] .sidebar a {
                color: #fff;
            }

            html[data-theme="dark"] .sidebar a:hover {
                background: #3a3a3a;
            }

            html[data-theme="dark"] blockquote {
                background: #333;
                border-left-color: var(--primary);
            }

            html[data-theme="dark"] .reading-time,
            html[data-theme="dark"] .last-updated {
                color: #aaa;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <aside class="sidebar">
                <div class="sidebar-title">📚 文章目录</div>
                    <a href="index.html" >
                        第1章: 想明白自己的核心资源
                    </a>
                    <a href="index2.html" >
                        第2章: 时间片优化·其一 提升单位时间收益
                    </a>
                    <a href="index3.html" >
                        第3章: 时间片优化·其二 提升单位时间效率
                    </a>
                    <a href="index4.html" >
                        第4章: 资产和被动收入·其一 获得资产
                    </a>
                    <a href="index5.html" >
                        第5章: 资产和被动收入·其二 创造资产
                    </a>
                    <a href="index6.html" >
                        第6章: 资产和被动收入·其三 资产的量化评估
                    </a>
                    <a href="index7.html" >
                        第7章: 销售时间片的方式
                    </a>
                    <a href="index8.html" >
                        第8章: 适合程序员创造的资产·其一 可自动化的业务
                    </a>
                    <a href="index9.html" >
                        第9章: 适合程序员创造的资产·其二 可众包和外包的业务
                    </a>
                    <a href="index10.html" >
                        第10章: 适合程序员创造的资产·其三  付费社群
                    </a>
                    <a href="index11.html" >
                        第11章: 适合程序员创造的资产·书籍出版
                    </a>
                    <a href="index12.html" >
                        第12章: 适合程序员创造的资产·付费专栏
                    </a>
                    <a href="index13.html" class="active">
                        第13章: 适合程序员创造的资产·付费课程
                    </a>
                    <a href="index14.html" >
                        第14章: 适合程序员创造的资产·应用市场卖付费软件
                    </a>
                    <a href="index15.html" >
                        第15章: 适合程序员创造的资产·订阅式软件和服务
                    </a>
                    <a href="index16.html" >
                        第16章: 适合程序员创造的资产·模板、插件和源代码市场
                    </a>
                    <a href="index17.html" >
                        第17章: 适合程序员创造的资产·经营媒体账号并带货
                    </a>
            </aside>
            <main class="main-content">
                <h1>适合程序员创造的资产·付费课程</h1>
<ul>
<li>低投入：★ 前期要准备，后期要剪辑，录音还可能要购买硬件</li>
<li>高产出：★★★★★ 用户愿意为好的课程花钱</li>
<li>可持续性：★★ 技术类课程大概半年需要更新一次</li>
<li>低风险：★★ 因为投入大，如果没人买就很亏，最好自带流量</li>
<li>低门槛：★★★ 有演讲经验很重要</li>
</ul>
<p>在线教育起来以后，录制教学视频也可以赚钱了。整体来讲，在我亲测过的各种变现方式中，付费课程是最稳定的、也最为大家的接受的。</p>
<h2>做课步骤</h2>
<h2>平台销售</h2>
<h3>渠道和分成</h3>
<p>大部分的平台合同有保密协议，所以不能对外讲。但<a href="https://study.163.com">网易云课堂</a>和<a href="https://www.udemy.com/">Udemy</a>在公开的讲师注册协议中写明了分成，所以这里说一下。</p>
<h4>网易云课堂</h4>
<p>网易的课分三类：</p>
<ul>
<li>独立上架：等于网易提供平台（视频上传管理、用户管理、支付系统等），由你自己来负责营销。<s>这个分成比例在 9:1 ，平台收取 10% 的技术服务费。我觉得非常划算。</s> <a href="https://weibo.com/1088413295/JbTMyB29m?from=page_1005051088413295_profile&amp;wvr=6&amp;mod=weibotime">网易在2020年5月修改了协议</a>，目前分成比例为实际收入的50%.</li>
<li>精品课：由网易帮你推广，但需要和他们签订独立的合同，会收取更多的分成。最麻烦的是，通常是独家授权。一旦签署了，就不能在其他平台上架课程了。</li>
<li>微专业：这个是网易自己规划的课程体系，从课程的策划阶段就需要和他们深度沟通。也是网易推广力度最大、收益最大的一类课程。</li>
</ul>
<p>方糖全栈课就放在网易平台上，觉得好的地方如下：</p>
<ul>
<li>支付渠道相对全，还支持花呗，这样对于我这种高价课就非常重要。苹果应用内购买课程渠道费用会被苹果扣掉30%，好想关掉 🤣</li>
<li>自带推广系统，愿意的话可以用来做课程代理系统。</li>
</ul>
<h4>Udemy</h4>
<p>相比之下 Udemy 就很贵了，分成是 5:5 ；支付上国内用户只能通过信用卡或者银行卡绑 paypal 支付。但可以把课程推向全球。（但我英文还不能讲课🙃）</p>
<p>腾讯课堂暂不推荐。主要原因是我作为网易金云奖最佳课程得主，以个人身份申请讲师资格，三次被拒。所以我觉得其他同学的门槛可能会更高。听说以机构方式申请比较容易，但这要求你有公司资质。</p>
<h2>实操分享</h2>
<p>（内容来自我的长文《如何做一个日入十万的技术课程》）</p>
<h3>part 1</h3>
<p>在讲实际操作之前，我们先来说几个关于做课的事实。做课并不像看起来的那么美好，背后有一些不易察觉的坑。</p>
<p>第一个事实：<strong>做课不难，卖课才难</strong>。</p>
<p>很多做技术的同学去翻各种IT课程网站上的课程的时候，都会有一个疑问：「为啥这些课程做得不怎么样，还能卖得这么好？」进而产生了一个幻觉，「如果我也能做这样的课，那也能卖这么多套，挣这么多钱」。</p>
<p>事实的一面是，绝大部分大厂的同学，只要肯花上足够的功夫在自己的专长领域，的确都能做出不错的课程。</p>
<p>但另一面是，并不是做得好的课程，都能卖得好。「酒好不怕巷子深」那是古代的事情，现在酒好不好都要靠流量。大部分人能用上的免费流量入口其实只有两个，一个是<strong>课程平台</strong>，比如网易云课堂等；<strong>另一个入口则是个人流量</strong>，比如你的微博、公众号等。</p>
<p>面向平台流量的课程，主要通过「比较」来竞争。因为这些平台的受众并不认识你，和你之间的信任关系也并未建立，所以他们往往是直接比较课程的可见部分。比如价格、时长、（很可能是空头支票的）就业承诺等内容。这是一个红海，有些竞争过度，也不是那么讲究，甚至还有买课送1G盗版技术资料的。</p>
<p>面向个人流量的课程，<strong>主要通过「品牌」来竞争</strong>。因为课程其实是非标准品，同样大纲的课程，不同的人讲出来的效果是不同的。认可你的人，自然会认可你的课，只要能持续的保证内容达到或者超出期望值，就可以不断的快速售卖课程。个人流量的问题是，它需要花很长的时间来建立，而且需要持续的去维护。</p>
<p>如果你没有准备足够的市场预算，就需要在这两个方向上找到突破口。</p>
<p>以我的课程《方糖新全栈·node版》（ 访问 quanzhanke.com 可见 ）为例，在个人流量上，是完全靠微博粉丝来销售。我会给他们一个非常高性价比的价格，因为这些流量没有平台分成，等于把给平台的钱给了自己粉丝。</p>
<p>在平台流量上，这个课程直接整合了一个RPG游戏，让它可以在一堆大前端课程里边显得与众不同。不过在就业向课程的竞争下，表现得并不好。</p>
<p>在双十一当天，这套课程的销售额超过了11万，但其中九成都来自于个人流量。</p>
<p>第二个事实，<strong>做课不如写码挣钱</strong></p>
<p>虽然头部课程的销售看起来都很厉害，但其实绝大部分课程的收益并不高。一般而言，定位为小几十的课程，销售过万已经不太多；定价几千的课程，即使是网易和腾讯这种官方品牌，举全站之力进行推广，销量往往也只有几百套。所以其实<strong>一套课程挣几十万是很不容易的事情</strong>，背后还有平台一般30%的渠道分成、苹果30%的支付分成，以及个人25%、企业约5%~10%的税。</p>
<p>以前边提到的Node课为例，虽然在双十一单天的销售看起来很喜人，但其实平均到整个课程的制作周期，月收入也只是在两万左右。</p>
<p>但一个中级程序员，一年的全部收入达到三十万还是比较容易的。最关键的是，基本没有风险。所以我已经劝退了好几个打算全职来做课的同学，除非你能做出爆款课程，否则兼职做课才是最好的选择。</p>
<p>第三个事实，<strong>爆款课程的竞争对手不是其他课程，而是自己……的盗版</strong>。</p>
<p>本来一个制作精良的课程，如果能持续更新，它的收入应该能维持到一个不错的现金流。从而良性的发展下去。</p>
<p>但是如果你的课程一年的累积收入能到几十万，那么差不多就能进入各个课程平台的排行榜了。没有意外的话，也会同步进入盗版名单。在淘宝、闲鱼、朋友圈和微信群、论坛以及B站上，都会先后出现你的课程的盗版。</p>
<p>虽然在你入驻时，各个课程平台都会宣扬他们有多NB的反盗版措施，但其实都是你自己发现盗版链接后提交给他们，然后他们让法务去下架。某些平台还有提交日期限制，比如一周只有一天能提交。</p>
<p>购买维权骑士之类的服务，效果可能好一点，但费用高昂，一门课在一万到两万，而且依然无法处理放置在国外未备案网站上的盗版内容。</p>
<p>很多讲师选择了预售、直播等相对妥协的方式，我自己则花了差不多一年时间开发了互动课系统。<strong>盗版课程最大的问题不是减少了你的收入，而是让那些第一时间支持你、购买你课程的正版用户看起来像个傻X</strong>。而这是我无法忍受的。</p>
<p>盗版问题是很难解决的，但大家都知道，单机游戏厂商转向网游开发后都在大把数钱。正好全栈课有一半的内容是后端，所以我把后端开发的环境也放到了云端，通过浏览器进行互动教学。</p>
<p>严格的讲，这也不能防止某些盗版用户把内容都下载下来，自己搭建一个互动平台。但这将原来直接录屏的盗版成本提升了一个数量级。最关键的是，同时也把正版用户的体验提升了一个数量级。</p>
<p>互动教学系统的开发并不难，一个Ubuntu+VsCode网页版基本就解决了大部分问题；稍微麻烦的是需要自己来写课程编排和VPS容器管理。</p>
<p>我建议的是，在课程最初就应该把这些东西做好。不要等到盗版以后再去做，因为一旦被盗版，课程关键字就被污染了，即使你新版做了很多更新，流量也还是会分流到旧版的盗版课程那边去。</p>
<h3>part 2</h3>
<p>下边我们来聊实际操作。</p>
<p>首先来说选题。很多同学做课都是自己会啥就做啥课，这个思路当然没错，但如果你专精的领域非常偏门，那么就很难做出畅销的课程来。</p>
<p><strong>选题直接决定了受众数量</strong>。如果你去翻下各个IT课程平台，就会发现卖得最好的往往都是语言无关的课程比如Git、MySQL、Docker以及各个语言的零基础入门课。</p>
<p>深度课程只有系统化的大课卖得还不错，那种完全针对进阶学员的课，往往叫好不叫座。</p>
<p>这里并不是叫大家不要做深度课，而是说，<strong>在你选择这个选题的时候，你应该明白这背后意味着什么，不要等到课程做完了销量不好的时候才来反思</strong>。</p>
<p>再来说说定价。表面上看，定价是由市场和竞品决定的。但其实背后，<strong>定价是由我们的课程带给学员的价值决定的</strong>。简单的说就是，我们要考虑的是，课程如何给学员带来比学费更多的价值，这样才能做到物有所值。</p>
<p>以我们PHP版的<a href="http://quanzhanke.com">全栈课</a>为例，这个课定价在3000。那如何才能给学员带来超过3000的回报呢？</p>
<p>这种高单价课程最明显的价值就是就业价值。只要学员通过课程找到工作，那么它带来的回报就是几十上百倍的。</p>
<p>当然，没有什么课程能真正保证你学完就能找到工作。所以就业价值都是概率事件，我们能做的是提升概率。</p>
<p>于是通过裁剪技术栈，我们把这个课程做成了国内几乎没有的多职位课程，学完以后，可以面试前端、也可以面试PHP、还可以面试区块链应用开发岗位。一下就把职业通路给扩宽了两倍。</p>
<p>另一方面，区块链开发作为私活技能，其实也很容易就能把学费挣回来。</p>
<p>这之后，我们才需要去考虑竞品。去考虑那些提供同样价值的课程定价如何。不过因为课程是非标准品，所以也只是一个参考。</p>
<p>确定了选题和定价，收入上限其实就已经决定了。当然会有特殊的情况，但大概率下的收入上限是可以预估的。</p>
<p>比如我们做一个Git使用的短课，课程时间大概在2~3小时，定价在10~20元。以各个平台卖得不错的Git课程销量为参考，我们可以知道1万套已经算是非常不错的了。所以这个课程的收入上限基本就在10~20万。</p>
<p>砍掉制作成本、分成、广告、用户支持成本，纯收益大概在10万。你可能会说，10万也很不错啊。</p>
<p>醒醒，这估算的是上限，是在非常顺利的情况下挣的钱。不是下限，只能卖几套的课程也是挺多的。所以我们要通过提升下限来降低风险。</p>
<p>在互联网产品中，我们往往通过MVP来进行评估需求。在课程制作上，其实也可以采用这个方式。</p>
<p>最简单的办法，是<strong>通过预售来评估下限</strong>。这里讲一个例子。今年年初，我一直在想，能不能把课程和游戏结合起来，做一个寓教于乐的产品。</p>
<p>所以有了《萌猫·室友·前端课》这个项目，它把教学内容整合到了RPG游戏里边。但这种全新的形式能不能被学员接受，是一个大问题。</p>
<p>于是我们在开发一个月以后，在方糖Next平台上进行了预售。这次预售使用了我这边全部的影响力，包括微博头条、推送、微信推送、站外转发。</p>
<p>但最终以3元的定价，只卖出去了不到700套。这意味着，即使我们把定价提升到30，我们的收益也就几万。于是我们中止了这个项目的第二季，把它合并到了node版全栈课中。</p>
<p>除了MVP，我们也可以通过预售平台来售卖折扣码、优惠券，在课程还未制作之前，就把收益锁定到一个区间里边。</p>
<p>通过预估上限和下限，我们可以有效的控制风险。尽可能的减少那种做了一年卖了一套的悲惨状况。</p>
<p>为了尽可能降低MVP的成本，我们采用机器语音来进行早期测试。它只需要编写PPT就能自动生成带演讲语音的视频。如果你已经有不少学员了，那么可以提供给他们试学，从而获得反馈意见。</p>
<p>我们测试机器语音的效果在个人流量转化的学员中反馈相当好，以至于目前课程都采用了机器语音。但是在平台流量中，转化不行。在考虑稍后制作价格更高的真人语音版本去转化平台流量。</p>
<p>我把这个PPT自动演讲的系统做成免费服务了，感兴趣的同学可以用用。网址是 slide.ftqq.com</p>
<h3>Part 3</h3>
<p>在最后一部分里边，我会分享一些最为具体的细节，为一些感兴趣但还没学会做课的同学做下简单入门。</p>
<p>课程最核心的结构就是大纲，一份好的大纲可以稳定50%的品质，更可以节约大量的时间。</p>
<p>虽然很多人都知道大纲怎么写，但是大部分的大纲都有一个很严重的问题，那就是不够详细。如果可能的话，我其实是建议大纲要细到每一段的。不是说你一开始就要写那么细，应该先章、后节、最后再段。这里是强调在大纲中最好把每一段说什么确定以后再往下走。</p>
<p>我用的工具最开始是 Xmind Zen，不过它们家的软件在2000个节点的时候性能就不太好了，而且是订阅制的。而订阅了导出PDF上边还有它们家的logo。所以后来就换成 MindNode 了，一次购买，终身使用。唯一蛋疼的是只有Mac版。</p>
<p>另一个不错的选择是 Dynalist ，虽然严格的讲它不是思维导图，而是类似于 workflow 那种树结构。但可以无限层级往下写东西的感觉非常不错。而且免费版就非常够用。</p>
<p>最后，和写小说不同，其实大部分课程的大纲都是差不多的，所以多参考下卖得好的课程的大纲，可以及时发现自己的疏漏之处。</p>
<p>很多同学写技术文章比较多，往往把写文章的习惯迁移到做课上来。其实目前大部分课程是以视频为主要载体的，所以应该以画面为中心组织内容。</p>
<p>这句话看起来不太好理解，我翻译一下：「别用word，用ppt和keynote」；「能用图，就别用字」。</p>
<p>别将课程想象成一本书，应该把它想象成一系列的演讲。就像天天讲TED一样，每一节课十来分钟，你要想办法把它讲得风生水起。</p>
<p>在录制课程使用的软件上，如果是使用Mac系统的同学，那么恭喜，你可以使用 Keynote 和 iMoive 这两个免费软件来进行课程录制。</p>
<p>在 Keynote 中，可以选择 「Play」→ 「Record slideshow 」进行课程的录制，完成以后可以直接导出为视频。</p>
<p>对于不在 Keynote 中展示的部分，则建议使用 OBS 这个开源软件来录制。它是跨平台的，在 Mac 和 Win 下都可以使用。</p>
<p>在录制过程中，建议使用 Keycastr 这个开源软件来显示按键。</p>
<p>等 PPT 和实战部分的视频都录制完成后，就该使用 iMovie 来进行剪辑了。这个软件使用很简单，是我用过的软件里做得最棒的。而且是免费的。顺便说一下，iMoive 是支持音频去噪的，建议打开。</p>
<p>最后，如果嫌 iMoive 导出的视频体积大，可以使用 HandBrake 来压制，选择 fast 1080p30 ，能输出大小和画质都不错的视频。这个软件也是开源的，还可以用来压字幕。最有意思的是，它其实还支持命令行调用，这样就可以通过脚本来做自动化。</p>
<p>当然，如果你喜欢完全的控制感而且有钱，可以用adobe的全家桶。剪辑用PR、音频用AU。</p>
<p>在课程剪辑方面，我比较习惯剪掉大部分的空白并加速等待。不过有些同学买课看时间的，所以也有很多课程根本不做剪辑</p>
<p>我个人的感觉其实做课并不太需要特别硬件，主要的就是麦克风。我之前用过扩展声卡、录音笔，感觉都还行。现在用的是 Zoom 的 H1n ，这个设备充电后可以随手拿着，也可以通过USB直连电脑录音，还能放到相机上边用，感觉还是不错的。</p>
<p>总结一下，这一篇长文的重点是：</p>
<ul>
<li>兼职做课比全职做课可能更好</li>
<li>选题和定价决定的收入上限</li>
<li>影响力和平台流量决定了收入下限</li>
<li>预售可以测试收入下限，避免无效投入</li>
<li>通过互动课可以相当程度的反盗版</li>
<li>技术课程是技术实践的副产品，需要一直通过实践来驱动</li>
</ul>

                <div class="reading-time">预计阅读时间: 20 分钟</div>
                <div class="last-updated">最后更新时间: 2025年2月16日 15:17</div>
                
                <div class="chapter-nav">
                        <a href="index12.html" class="prev" title="上一章：适合程序员创造的资产·付费专栏">
                            上一章：适合程序员创造的资产·付费专栏
                        </a>
                    
                        <a href="index14.html" class="next" title="下一章：适合程序员创造的资产·应用市场卖付费软件">
                            下一章：适合程序员创造的资产·应用市场卖付费软件
                        </a>
                </div>
            </main>
        </div>
        
        <button class="theme-toggle" id="themeToggle" title="切换深色/浅色模式">
            🌓
        </button>

        <script>
            // 主题切换功能
            const themeToggle = document.getElementById('themeToggle');
            const html = document.documentElement;
            
            // 检查本地存储中的主题设置
            const savedTheme = localStorage.getItem('theme');
            if (savedTheme) {
                html.setAttribute('data-theme', savedTheme);
            } else {
                // 如果没有保存的主题，则使用系统主题
                const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
                html.setAttribute('data-theme', prefersDark ? 'dark' : 'light');
            }
            
            // 切换主题
            themeToggle.addEventListener('click', () => {
                const currentTheme = html.getAttribute('data-theme');
                const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
                
                html.setAttribute('data-theme', newTheme);
                localStorage.setItem('theme', newTheme);
            });

            // 监听系统主题变化
            window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
                if (!localStorage.getItem('theme')) {
                    html.setAttribute('data-theme', e.matches ? 'dark' : 'light');
                }
            });

            // 平滑滚动
            document.querySelectorAll('a[href^="#"]').forEach(anchor => {
                anchor.addEventListener('click', function (e) {
                    e.preventDefault();
                    document.querySelector(this.getAttribute('href')).scrollIntoView({
                        behavior: 'smooth'
                    });
                });
            });
        </script>
    </body>
    </html>
